package com.example.demo.designPhilosophy.ocp;

/**
 * @description: TODO 电脑的接口类 开闭原则:  对扩展开发、对修改关闭(具有更好的扩展性)
 * 对于开闭原则来说，完全不修改代码是不可能的，只能尽可能的遵循开闭原则规范
 * @author yangzhenyu
 * @date 2022/2/15 17:47
 * @version 1.0
 */
interface ComputerFactory{
    //使用电脑类型
    Computer toComputer();
}

class YangZhenYu implements  ComputerFactory{
    @Override
    public Computer toComputer() {
        return new Dell();
    }
}
class zhangSan implements ComputerFactory{

    @Override
    public Computer toComputer() {
        return new Lenovo();
    }
}
public class Test {
    public static void main(String[] args) {
        new YangZhenYu().toComputer().work();
        new zhangSan().toComputer().work();
    }
}

/**
 * 违反开闭原则的例子
 * 当新增新的电脑属性时，会修改已有的代码，违反开闭原则
 * */
class Factory{

    public Computer select(String code){
        Computer computer = null;
        if ("Dell".equals(code)){
            return new Dell();
        }else if ("Lenovo".equals(code)){
            return  new Lenovo();
        }
        return computer;
    }

}
